﻿<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="V8._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>XCode V8 Online Demo By 老邱</title>
</head>
<body>
    <form id="form1" runat="server">
    <ext:PageManager ID="PageManager1" AutoSizePanelID="RegionPanel1" HideScrollbar="true"
        runat="server"></ext:PageManager>
    <ext:RegionPanel ID="RegionPanel1" ShowBorder="false" runat="server">
        <Regions>
            <ext:Region ID="Region1" Margins="0 0 0 0" Height="62px" ShowBorder="false" ShowHeader="false"
                Position="Top" Layout="Fit" runat="server">
                <Toolbars>
                    <ext:Toolbar ID="Toolbar1" Position="Bottom" runat="server">
                        <Items>
                            <ext:ToolbarText ID="ToolbarText1" Text="&nbsp;" runat="server">
                            </ext:ToolbarText>
                            <ext:Button ID="btnExpandAll" IconUrl="~/images/expand-all.gif" Text="展开&nbsp;"
                                EnablePostBack="false" runat="server">
                            </ext:Button>
                            <ext:Button ID="btnCollapseAll" IconUrl="~/images/collapse-all.gif" Text="收拢&nbsp;"
                                EnablePostBack="false" runat="server">
                            </ext:Button>
                            <ext:ToolbarFill ID="ToolbarFill1" runat="server">
                            </ext:ToolbarFill>
                            <ext:ToolbarText ID="ToolbarText4" Text="" runat="server">
                            </ext:ToolbarText>
                            <ext:ToolbarText ID="ToolbarText3" Text="" runat="server">
                            </ext:ToolbarText>
                            <ext:ToolbarText ID="ToolbarText2" Text="&nbsp;" runat="server">
                            </ext:ToolbarText>
                            <ext:Button ID="Exit" Text="退出系统" runat="server" ConfirmTarget="Top" ConfirmText="你真的要退出系统吗？" ConfirmIcon="Question" Icon="ApplicationOsxHome" EnablePostBack="true" OnClick="Exit_Click"></ext:Button>
                        </Items>
                    </ext:Toolbar>
                </Toolbars>
                <Items>
                    <ext:ContentPanel ShowBorder="false" ShowHeader="false" BodyStyle="background-color:#1C3E7E;"
                        ID="ContentPanel11" runat="server">
                        <table cellpadding="0" cellspacing="0" width="100%">
                        <tr>
                            <td>
                                <div class="header">
                                <a href="#" style="color:#fff;">XCode V8 Online Demo</a>
                                </div>
                            </td>
                            <td style="text-align:right;color:#ccc;display:none;">&nbsp;</td>
                        </tr>
                        </table>
                    </ext:ContentPanel>
                </Items>
            </ext:Region>
            <ext:Region ID="Region2" Split="true" EnableSplitTip="true" CollapseMode="Mini" Width="200px"
                Margins="0 0 0 0" ShowHeader="true" Title="XCode V8" Icon="Outline" EnableCollapse="true"
                Layout="Fit" Position="Left" runat="server">
                <Items>
                    <ext:Tree runat="server" EnableArrows="true" ShowBorder="false" ShowHeader="false"  
                        AutoScroll="true" ID="treeMenu">
                    </ext:Tree>
                </Items>
            </ext:Region>
            <ext:Region ID="mainRegion" ShowHeader="false" Layout="Fit" Margins="0 0 0 0" Position="Center"
                runat="server">
                <Items>
                    <ext:TabStrip ID="mainTabStrip" EnableTabCloseMenu="true" ShowBorder="false" runat="server">
                        <Tabs>
                            <ext:Tab ID="Tab1" Title="关于V8" Layout="Fit" Icon="House" runat="server">
                                <Toolbars>
                                    <ext:Toolbar>
                                        <Items>
                                            <ext:ToolbarFill ID="ToolbarFill2" runat="server">
                                            </ext:ToolbarFill>

                                            <ext:ToolbarSeparator ID="ToolbarSeparator1" runat="server">
                                            </ext:ToolbarSeparator>
  
                                        </Items>
                                    </ext:Toolbar>
                                </Toolbars>
                                <Items>
                                    <ext:ContentPanel ID="ContentPanel1" ShowBorder="false" BodyPadding="10px" ShowHeader="false" AutoScroll="true"
                                        CssClass="intro" runat="server">
<p><strong>XCode</strong><br>
XCode是一个轻量级的数据映射框架，提供以面向对象的方式操作数据库的功能，能够解决90%以上的数据库操作场景。<br>
<br>
做为X系列组件最重要的一员，XCode秉承了简单实用的特点，力求以最简单的做法，解决最普遍的问题。<br>
<br>
XCode最大的&ldquo;缺点&rdquo;就是&ldquo;不支持&rdquo;多表查询！为何不支持要加双引号？那是因为XCode实际上支持多表查询，只是用起来非常复杂，也不容易讲清楚，会严重影响基本功能的学习理解，所以逢人问到，我都回答不支持！至于缺点二字加双引号，是因为XCode有一整套替代方案，在绝大多数情况上，更优于多表查询。<br>
<br>
<span style="color:#0000ff"><a href="http://xcode.codeplex.com/discussions" target="_blank"><strong>有任何问题，请看讨论版！</strong></a></span><br>
<br>
提供XCode v3.5.2009.0714 源码，因v3.5至v7.0版本有多个在运行的授权商业项目，暂时无法提供源代码。v3.5之后核心基本上就定下来，版本更新只是为了增加一些功能。<br>
提供XCode v7.6.2010.0409 组件，没有任何使用限制！<br>
<br>
QQ群：<strong><span style="color:#ff0000">10193406</span></strong><br>
博 客：<span style="color:#ff0000"><strong>http://nnhy.cnblogs.com</strong></span><br>
<br>
<span style="color:#008000">/*</span><br>
<span style="color:#008000">* XCode的重大改进</span><br>
<span style="color:#008000">* </span><br>
<font style="COLOR: #008000">/*<br>
&nbsp;* v8.0.2011.0910&nbsp;&nbsp; 数据层使用全新的接口IDataTable、IDataColumn、IDataIndex、IDataRelation<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 尝试使用服务提供者，外部可替代内部各接口实现<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据层/实体层、正向/反向工程 增加索引支持，在部署到生成环境时同步创建索引，保证系统最佳性能<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 丰富实体类的添删改查，增加多种常见页面用法<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重点：把数据库=&gt;实体类+页面的用法，改为模型+模版=&gt;数据库+实体类+页面的使用方式，扩大数据架构的表现能力，全力支持魔方平台<br>
&nbsp;* <br>
&nbsp;* v7.16.2011.0803&nbsp; 修正MSSQL中创建数据库指定文件位置时出错的BUG<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加设置项SQLPath，允许把SQL日志写入到单独的SQL日志中<br>
&nbsp;* <br>
&nbsp;* v7.15.2011.0725&nbsp; 修正EntityFactory中创建实体操作者可能出现的BUG，解决非泛型继承的问题，如Admin=&gt;Administrator=&gt;Administrator&lt;Administrator&gt;<br>
&nbsp;* <br>
&nbsp;* v7.14.2011.0723&nbsp; 增加实体缓存接口IEntityCache和单对象缓存接口ISingleEntityCache<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IEntityOperate增加缓存等操作支持<br>
&nbsp;* <br>
&nbsp;* v7.13.2011.0622&nbsp; 优化SQLite，如果外部不指定缓存大小等参数，则自动使用最高性能的参数<br>
&nbsp;* <br>
&nbsp;* v7.12.2011.0614&nbsp; SQLite增加对内存数据库的支持，数据源设置为:memory:或者空，即表示使用内存数据库<br>
&nbsp;* <br>
&nbsp;* v7.11.2011.0613&nbsp; 修正v7.8.2011.0510中修改时遗留下来的问题，一个是SQLite.DropColumnSQL中把两个参数写反了，一个是DatabaseSchema中，如果先增加字段后删除字段会出错<br>
&nbsp;* <br>
&nbsp;* v7.11.2011.0612&nbsp; 修正v7.10.2011.0608中修改时遗留下的问题，完整实现最大最小值分页，同时发现TopNotIn分页和MaxMin分页无法完美的支持GroupBy查询分页，只能查到第一页<br>
&nbsp;* <br>
&nbsp;* v7.11.2011.0611&nbsp; 修正v7.10.2011.0608中修改时遗留下的问题，获取列表时默认使用自增字段降序，根据主键获取单记录的方法绕过此处，免受影响<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非常重要：修改EntityBase，给实体类数据属性赋值时，如果新旧值相等，不影响脏数据，剐需要影响脏数据，请使用SetItem<br>
&nbsp;* <br>
&nbsp;* v7.11.2011.0610&nbsp; 修改DbBase，对于需要外部提供者的数据库类型，在没有提供者程序集时，自动从网络上下载，等待3秒<br>
&nbsp;* <br>
&nbsp;* v7.10.2011.0608&nbsp; Entity中自增或者主键查询，记录集肯定是唯一的，不需要指定记录数和排序<br>
&nbsp;* <br>
&nbsp;* v7.9.2011.0603&nbsp;&nbsp; 实体类增加三个根据实体缓存查找数据的方法，方便ObjectDataSource绑定<br>
&nbsp;* <br>
&nbsp;* v7.9.2011.0602&nbsp;&nbsp; 修正EntityTree中的排序错误，增加升降排序方法，支持同级升降排序<br>
&nbsp;* <br>
&nbsp;* v7.9.2011.0529&nbsp;&nbsp; 实体类添删改拆分两部分，OnInsert/OnUpdate/Delete作为操作数据的真实操作，Insert/Update/Delete作为调用者，配合以数据验证和事务保护<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加数据验证Valid，实体类可以重载，以实现Insert/Update前验证数据，将来可能根据数据字段特性进行自动化验证。<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加数据存在判断Exist，开发者可根据需要调用，建议用于业务主键的存在性判断。CheckExist可以在判断后抛出异常。<br>
&nbsp;* <br>
&nbsp;* v7.9.2011.0526&nbsp;&nbsp; 重构XCode实体层元数据部分，使用公开的TableItem替代保护的XCodeConfig，配合FieldItem形成完成的实体元数据结构<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用专用类实现IEntityOperator接口，避免原来臃肿的结构<br>
&nbsp;* <br>
&nbsp;* v7.8.2011.0512&nbsp;&nbsp; 更新SelectBuilder，更新QueryCount相关代码，保证生成最精简的QueryCount查询语句，对于MySql而言，避开子查询，有巨大的性能优势<br>
&nbsp;* <br>
&nbsp;* v7.8.2011.0510&nbsp;&nbsp; 增强SQLite的反向工程能力，SQLite不支持修改字段和删除字段，但是可以通过新建表然后复制数据的方式替代，并且解决了新增不允许空且又没有默认值的字段时出错的问题<br>
&nbsp;* <br>
&nbsp;* v7.7.2011.0429&nbsp;&nbsp; 修正Access创建表时不应该同时操作默认值的错误<br>
&nbsp;* <br>
&nbsp;* v7.6.2011.0420&nbsp;&nbsp; 修正XCode中反向工程模块判断是否普通实体类的错误<br>
&nbsp;* <br>
&nbsp;* v7.6.2011.0409&nbsp;&nbsp; 重新启用实体类的ToData，允许实体数据转化为DataRow<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityList增加ToDataTable和ToDataSet等方法，允许实体集合转为数据集，并通过事件把数据集的添删改操作委托到实体操作<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一级缓存默认设置改为请求级缓存，避免在Web项目中因不正当使用查询而带来的性能损耗<br>
&nbsp;* <br>
&nbsp;* v7.5.2011.0403&nbsp;&nbsp; 修正XField中Xml序列化的问题<br>
&nbsp;* <br>
&nbsp;* v7.5.2011.0401&nbsp;&nbsp; 增加Json支持<br>
&nbsp;* <br>
&nbsp;* v7.4.2011.0331&nbsp;&nbsp; 实体类Insert后清空脏数据，避免连续两次Save变成一次Insert和一次Update<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修正实现组件模型接口中的一些问题，测试通过，基本上满足WinForm开发要求<br>
&nbsp;* <br>
&nbsp;* v7.4.2011.0330&nbsp;&nbsp; 修正3月23号更新SqlServer时带来的另一个错误——无法创建自增字段；同时增加了把原字段设置为自增字段的功能，先删后加！<br>
&nbsp;* <br>
&nbsp;* v7.4.2011.0329&nbsp;&nbsp; 修正动态生成代码时属性名与类型重名导致编译出错的问题<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XTable和XField实现克隆接口<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityBase实现INotifyPropertyChanging, INotifyPropertyChanged, ICustomTypeDescriptor, IEditableObject接口<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityList实现ITypedList, IBindingList, IBindingListView, ICancelAddNew接口<br>
&nbsp;* <br>
&nbsp;* v7.4.2011.0325&nbsp;&nbsp; Entity所有基类标识为可序列化<br>
&nbsp;* <br>
&nbsp;* v7.4.2011.0323&nbsp;&nbsp; 修改反向工程，当多个实体类使用同一数据表时，优先使用非通用实体类<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改SqlServer提供者，支持修改字段的主键属性<br>
&nbsp;* <br>
&nbsp;* v7.4.2011.0321&nbsp;&nbsp; EntityList增加Join方法，串联指定成员，方便由实体集合构造用于查询的子字符串<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 进行异步数据初始化时，如果内部遇到其它数据初始化，则在当前线程进行处理，保证数据初始化的同步进行，保证某些业务数据的初始化安装预定顺序进行。<br>
&nbsp;* <br>
&nbsp;* v7.4.2011.0318&nbsp;&nbsp; 实体缓存增加是否允许空的设置，如果不允许空则即使缓存未过期也进行数据刷新<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 稍微优化实体缓存和单对象缓存，提升性能<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 计划加强各个缓存，特别是单对象缓存，利用维护线程删除过期缓存项，也可能借助System.Web.Caching.Cache<br>
&nbsp;* <br>
&nbsp;* v7.3.2011.0314&nbsp;&nbsp; 修正实体基类静态构造函数的死锁问题，感谢邱鹏发现该问题！<br>
&nbsp;* <br>
&nbsp;* v7.3.2011.0313&nbsp;&nbsp; 扩展EntityTree，增加Contains、ChildKeys、ChildKeyString、AllChildKeys、AllChildKeyString<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改EntityBase，GetExtend方法增加是否缓存默认值的选项，使用者可以选择在取不到数据时是否缓存代表空的默认值<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改EntityTree的Root属性，不缓存空值，大多数情况下，树形结构的数据都不应该为空<br>
&nbsp;* <br>
&nbsp;* v7.3.2011.0311&nbsp;&nbsp; 修正非MS数据库的分页错误<br>
&nbsp;* <br>
&nbsp;* v7.3.2011.0310&nbsp;&nbsp; 修正判断保留字时使用泛型List导致性能低下的BUG，改为Dictionary<br>
&nbsp;* <br>
&nbsp;* v7.3.2011.0307&nbsp;&nbsp; 增加对Firebird和PostgreSQL的支持，未完全测试通过<br>
&nbsp;* <br>
&nbsp;* v7.2.2011.0303&nbsp;&nbsp; 实体操作接口增加InitData方法，实体类可以重载，用于在第一次使用数据库时初始化数据<br>
&nbsp;* <br>
&nbsp;* v7.1.2011.0228&nbsp;&nbsp; MSSQL中使用架构信息判断数据库和数据表是否存在，避免某些情况下没有权限使用系统视图而出错<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IDatabase接口增加保留字和FormatName方法，只有关键字才进行格式化<br>
&nbsp;* <br>
&nbsp;* v7.1.2011.0224&nbsp;&nbsp; 调整方法InsertAndGetIdentity<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLite中去掉读写锁，改为写入时判断数据库是否锁定，如果已锁定则重试<br>
&nbsp;* <br>
&nbsp;* v7.1.2011.0223&nbsp;&nbsp; 调整Oracle的数据架构功能<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oracle增加快速查找表记录数方法<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XField调整，规范化长度、字节数、精度和位数<br>
&nbsp;* <br>
&nbsp;* v7.1.2011.0222&nbsp;&nbsp; SQLite使用完整读写锁，避免读取时有写入操作然后报文件锁定<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLite写入操作允许重试两次，以解决高并发时文件锁定的小概率事件<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改数据库架构，在获取数据库是否存在出现异常时，默认数据库已存在，因为一般来说都是没有管理员权限造成的错误，并且大多数时候数据库都是存在的<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改DAL的构造函数，检查数据库架构的异常不应该影响DAL的正常使用<br>
&nbsp;* <br>
&nbsp;* v7.1.2011.0215&nbsp;&nbsp; 热心网友 Hannibal 在处理日文网站时发现插入的日文为乱码（MSSQL），这里加上N前缀，同时给时间日期加上ts前缀<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLite数据库处理字节数组时，加上X前缀<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把实体类中的SQL方法，设为共有，便于外部获取SQL语句<br>
&nbsp;* <br>
&nbsp;* v7.1.2011.0212&nbsp;&nbsp; 增加网络数据库提供者Network，把各种操作直接路由给远端<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加分布式数据库提供者Distributed，同时读写多个数据库<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设计方案最佳实践：<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1，使用MySql自身的集群，一主多从，XCode配置使用分布式提供者，更新写入主库，从各从库读取数据，实现负载均衡<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2，使用网络数据库提供者实现路由中转，实现故障转移<br>
&nbsp;* <br>
&nbsp;* v7.0.2011.0201&nbsp;&nbsp; 重写数据访问层，便于功能扩展<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重写数据架构（反向工程），完善SQLite和MySql的反向工程支持<br>
&nbsp;* <br>
&nbsp;* v6.6.2010.1230&nbsp;&nbsp; 修改XCode类型映射模型，统一使用Schema信息，不再人为指定类型映射，全部交由数据库提供者处理<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由C#类型反向到数据类型的映射尚未完成<br>
&nbsp;* <br>
&nbsp;* v6.5.2010.1223&nbsp;&nbsp; 修正SQLite已知的一些问题，查找dll文件路径不正确，执行插入语句不正确<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IEntity增加CopyFrom方法，用于从指定实体对象复制成员数据<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加对二进制字段的支持，表现为Byte[]<br>
&nbsp;* <br>
&nbsp;* v6.4.2010.1217&nbsp;&nbsp; 修正Entity中CheckColumn无法正确计算选择字段的错误<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 优化SelectBuilder，允许Where中使用GroupBy字句，ToString时自动分割到正确位置<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体类增加静态方法FindByKeyForEdit，用于替代模版生成中的FindByKeyForEdit，为将要实现的表单基类（自定义表单）做准备<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ********************************<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体基类继承自BinaryAccessor，IEntity增加IIndexAccessor接口和IBinaryAccessor接口，增加对快速索引访问和二进制访问的支持<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 快速索引访问：实体类可以不必生成索引器代码，IIndexAccessor直接提供按名称访问属性<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 二进制访问：支持把实体对象序列化成二进制或者反向操作<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这两个功能尚未经过严格测试，请不要用于正式系统使用！<br>
&nbsp;* <br>
&nbsp;* v6.3.2010.1209&nbsp;&nbsp; 修正实体工厂EntityFactory缓存实体导致无法识别后加载实体程序集的错误<br>
&nbsp;* <br>
&nbsp;* v6.2.2010.1202&nbsp;&nbsp; SQLite增加读写锁，限制同时只能指定一个Excute操作<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entity的PageSplitSQL方法修正表名没有进行格式化的BUG<br>
&nbsp;* <br>
&nbsp;* v6.1.2010.1119&nbsp;&nbsp; 取消依赖XLog，升级为依赖NewLife.Core，部分公共类库移植到NewLife.Core<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修正EntityTree中FindChilds错误，增加排序字段的支持，如果指定排序字段，查询子级的时候将按排序字段降序排序<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取消授权限制，但仍然混淆代码<br>
&nbsp;* <br>
&nbsp;* v6.0.2010.1021&nbsp;&nbsp; 增加字典缓存DictionaryCache<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加弱引用泛型WeakReference&lt;T&gt;<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单对象实体缓存改为弱引用，使得缓存对象在没有引用时得到回收<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单对象实体缓存默认填充方法改为实体基类的FindByKey（前面某个版本增加，参数为Object），据说Delegate.CreateDelegate出来的委托会很慢<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体元数据类Meta增加单对象实体缓存SingleCache，给SingleCacheInt和SingleCacheStr加上过期标识，到v7.0将不再支持<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体元数据类Meta增加OnDataChange的数据改变事件，并使用弱引用，当该实体有数据改变后，触发事件，可用于在外部清楚该对象的缓存<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （重要更新）实体基类增加字典缓存Extends，用于存储扩展属性，并增加专属的GetExtend方法用于获取扩展属性，向依赖实体类注册数据更改事件<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （重要更新）实体树类升级为实体树基类，所有具有树形结构数据的实体类，继承自该类，享受树形实体的各种功能<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体基类增加虚拟的CreateXmlSerializer，允许实体类重载以改变Xml序列化行为，默认序列化行为改为序列化为特性<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityList改变序列化行为，默认序列化为特性<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityList判断元素是否存在Contains方法改为Exists<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityList增加多字段排序方法Sort，可用于多个字段排序<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修复快速访问方法、属性和字段所存在的问题，在实体基类索引器使用<br>
&nbsp;* <br>
&nbsp;* v5.9.2010.1020&nbsp;&nbsp; 修正Database中QueryCountFast的严重错误<br>
&nbsp;* <br>
&nbsp;* v5.8.2010.1018&nbsp;&nbsp; 增加实体树接口IEntityTree，用于解决实体树操作的一些共性问题，避免死循环<br>
&nbsp;* <br>
&nbsp;* v5.7.2010.0930&nbsp;&nbsp; XField中增加一个Table属性指向自己的XTable，创建XField时必须指定所属XTable<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加只读列表，各配置项使用只读列表返回，配置项自身检测列表是否被修改<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体操作接口增加Fields和FieldNames属性<br>
&nbsp;* <br>
&nbsp;* v5.6.2010.0909&nbsp;&nbsp; 修改DAL，把QueryTimes和ExecuteTimes改为本线程的查询次数和执行次数<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改Entity，Meta.Count返回表的总记录数（快速），FindCount()使用普通方法查询真实记录数<br>
&nbsp;* <br>
&nbsp;* v5.5.2010.0903&nbsp;&nbsp; 实体操作接口IEntityOperate返回的实体集合改为EntityList&lt;IEntity&gt;，因为使用操作接口时一般不知道具体类型，如果知道就没必要使用操作接口<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加数据连接名映射的配置，允许通过配置修改某一个实体或者某一个连接名实际对应的连接名<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改实体缓存和单对象缓存，使得缓存的数据因连接名或表名不同而不同，避免不同连接名或表名时缓存串号的问题<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改实体类结构模型，比如Area:Area&lt;Area&gt;:Entity&lt;Area&gt;，使得实体类可以通过继承实现二次扩展<br>
&nbsp;* <br>
&nbsp;* v5.4.2010.0830&nbsp;&nbsp; 数据架构中的异步检查BeginCheck当启用检查时改为同步检查Check，保证数据库操作前先完成一次数据架构检查<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 唯一键为自增且参数小于等于0时，返回空<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 实体操作接口IEntityOperate增加ToList方法，实现把ICollection转为List&lt;IEntity&gt;<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 优化Entity的FindAll方法，处理海量数据尾页查询时使用优化算法<br>
&nbsp;* <br>
&nbsp;* v5.3.2010.0826&nbsp;&nbsp; DAL增加CreateOperate方法，为数据表动态创建实体类操作接口，支持在没有实体类的情况下操作数据库<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该版本为不稳定版本<br>
&nbsp;* <br>
&nbsp;* v5.2.2010.0726&nbsp;&nbsp; IEntity接口增加SetItem方法，提供影响脏数据的弱类型数据设置<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IEntityOperate接口增加Create方法，提供创建被类型实体对象的功能<br>
&nbsp;* <br>
&nbsp;* v5.1.2010.0709&nbsp;&nbsp; 增加实体接口、实体操作接口、实体基类的基类，提供弱类型的Orm支持<br>
&nbsp;* <br>
&nbsp;* v5.0.2010.0625&nbsp;&nbsp; DAL优化<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重新启用授权管理<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EntityList增加排序方法Sort<br>
&nbsp;* <br>
&nbsp;* v4.9.2010.0430&nbsp;&nbsp; 使用SelectBuilder来构造SQL语句，用于各层之间传递，准备将所有方法往SelectBuilder过度。该更新可能造成使用GroupBy的地方计算出错<br>
&nbsp;* <br>
&nbsp;* v4.8.2010.0325&nbsp;&nbsp; 修改Entity索引器，新的快速调用方法在set的时候有问题<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增加常用查询方法为Web方法<br>
&nbsp;* <br>
&nbsp;* v4.8.2010.0301&nbsp;&nbsp; 增加实体类多表支持和多数据库支持<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 暴露几个常用的实体类静态方法供WebService引用<br>
&nbsp;* <br>
&nbsp;* v4.7.2010.0130&nbsp;&nbsp; 数据架构中识别表名时不应该区分大小写<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entity中增加MakeCondition方法，以便于构造where语句<br>
&nbsp;* <br>
&nbsp;* v4.6.2009.1226&nbsp;&nbsp; 改善分页算法，产生更简单的分页语句<br>
&nbsp;* <br>
&nbsp;* v4.5.2009.1127&nbsp;&nbsp; 增加单实体缓存<br>
&nbsp;* <br>
&nbsp;* v4.4.2009.1125&nbsp;&nbsp; 修改二级缓存，Entities改为EntityList类型，非空，支持FindAll操作<br>
&nbsp;* <br>
&nbsp;* v4.3.2009.1121&nbsp;&nbsp; 修正Entity中Save方法判断自增字段不准确的BUG<br>
&nbsp;* <br>
&nbsp;* v4.2.2009.1114&nbsp;&nbsp; 优化SqlServer取架构信息的性能，以及输出的SQL的可读性<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持Sql2008，通过Sql2005类<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 优化QueryCount方法，产生更简短的SQL<br>
&nbsp;* <br>
&nbsp;* v4.1.2009.1028&nbsp;&nbsp; 增加快速获取单表总记录数方法QueryCountFast，修改Entity，在记录数大于1000时自动使用快速取总记录数<br>
&nbsp;* <br>
&nbsp;* v4.0.2009.1011&nbsp;&nbsp; 增加实体类集合EntityList，Entity的所有FindAll返回EntityList<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 增强数据架构功能，支持Access、SQL2000、SQL2005<br>
&nbsp;* <br>
&nbsp;* v3.7.2009.0907&nbsp;&nbsp; 修正DatabaseSchema中的一个小错误<br>
&nbsp;* <br>
&nbsp;* v3.6.2009.0819&nbsp;&nbsp; 修正FindCount方法的错误<br>
&nbsp;* <br>
&nbsp;* v3.5.2009.0714&nbsp;&nbsp; Config类输出的FieldItem集合改为数组，防止被外部修改。<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有Select语句，使用*表示所有列，而不是列出所有列名。<br>
&nbsp;* <br>
&nbsp;* v3.4.2009.0701&nbsp;&nbsp; 修正SqlServer 2000取主键的错误<br>
&nbsp;* <br>
&nbsp;* v3.3.2009.0628&nbsp;&nbsp; 修改DAL，屏蔽Web请求级缓存DB的方法，似乎Web下多线程很不稳定，从而导致事务无法正常使用。<br>
&nbsp;* <br>
&nbsp;* v3.2.2009.0623&nbsp;&nbsp; 修改Oracle，重载GetTables方法，修正无法从Oracle数据库取得构架信息的错误<br>
&nbsp;* <br>
&nbsp;* v3.1.2009.0611&nbsp;&nbsp; 修改SqlServer类，使得每次返回构架信息时，都是从数据库取值。<br>
&nbsp;* <br>
&nbsp;* v3.0.2009.0608&nbsp;&nbsp; 元数据类Meta增加一个字段名列表属性FieldNames<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调整DatabaseSchema类，新增字段时，直接设置默认值，否则对于非空字段，创建字段将会失败<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据构架增加DatabaseSchema_Exclude配置项，用于指定要排除检查的链接名。<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entity中，增加ToXml输出的Xml的编码为UTF8，增加FromXml反序列化，增加Clone方法和CloneEntity方法<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Database中，增加事务计数字段，支持多级事务。<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entity中，集合运算返回值改为List&lt;T&gt;，而不是IList&lt;T&gt;，更方便调用<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Database的QueryCount方法增加自动去除排序子句的功能<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entity中，增加ToString重载，默认显示Name属性<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Entity中，Update时，增加了脏数据的判断，非脏数据的字段不更新，由于该功能的增加将导致以前所有的实体都无法Update到数据库，故版本改为3.0<br>
&nbsp;* <br>
&nbsp;* v2.3.2009.0530&nbsp;&nbsp; 修正非自增字段做主键时也调用InsertAndGetIdentity的错误。<br>
&nbsp;* <br>
&nbsp;* v2.2.2009.0527&nbsp;&nbsp; 数据表结构中，增加Int16和Int64两种类型<br>
&nbsp;* <br>
&nbsp;* v2.1.2009.0408&nbsp;&nbsp; 修正DAL中_DBs空引用的问题，可能是因为该成员是线程静态，并没有在每一个线程上new一个对象。<br>
&nbsp;* <br>
&nbsp;* v2.0.2009.0408&nbsp;&nbsp; 增加数据架构的功能。数据架构可以实现通过实体类反向更新数据库结构，不启用时，仅把更新SQL写入日志<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修正Access类使用当前目录时拼接路径的错误。<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;* v1.2.2008.01.01&nbsp; 使用泛型基类重构<br>
&nbsp;* <br>
&nbsp;* v1.1.2007.03.08&nbsp; 大量扩展功能，支持自定义表单、广义单点登录等项目<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完善对Oracle的支持，支持电力生产管理系统等项目<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完善对Sybase的支持，支持电力SCADA数据分析等项目<br>
&nbsp;* <br>
&nbsp;* v1.0.2005.10.01&nbsp; 创建项目<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持C++客户端网络验证系统等项目<br>
&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持图片验证码识别等项目<br>
*/</font>
<span style="color:#008000">*/</span></p>

                                    </ext:ContentPanel>
                                </Items>
                            </ext:Tab>
                        </Tabs>
                    </ext:TabStrip>
                </Items>
            </ext:Region>
        </Regions>
    </ext:RegionPanel>
    <ext:Window ID="windowSourceCode" Title="Source Code" Popup="false" EnableIFrame="true"
        runat="server" IsModal="true" Width="900px" Height="550px" EnableClose="true"
        EnableMaximize="true">
    </ext:Window>
    </form>
    <img src="~/images/logo/logo3.gif" id="logo" />

    <script type="text/javascript">

        function onReady() {
            var treeMenu = Ext.getCmp('<%= treeMenu.ClientID %>');

            // Click expand toolbar button.
            var btnExpandAll = Ext.getCmp('<%= btnExpandAll.ClientID %>');
            btnExpandAll.on('click', function () {
                treeMenu.expandAll();
            });

            // Click collapse toolbar button.
            var btnCollapseAll = Ext.getCmp('<%= btnCollapseAll.ClientID %>');
            btnCollapseAll.on('click', function () {
                treeMenu.collapseAll();
            });


            function addExampleTab(node) {
                var href = node.attributes.href;

                var windowSourceCode = Ext.getCmp('<%= windowSourceCode.ClientID %>');
                // Generate source code button


                var openNewWindowButton = new Ext.Button({
                    text: '新窗口打开',
                    type: "button",
                    cls: "x-btn-text-icon",
                    icon: '<%= IconHelper.GetIconUrl(Icon.TabGo) %>',
                    listeners: {
                        click: function (button, e) {
                            window.open(href, "_blank");
                            e.stopEvent();
                        }
                    }
                });

                var refreshButton = new Ext.Button({
                    text: '刷新',
                    type: "button",
                    cls: "x-btn-text-icon",
                    icon: '<%= IconHelper.GetIconUrl(Icon.Reload) %>',
                    listeners: {
                        click: function (button, e) {
                            // Note: button.ownerCt is toolbar, button.ownerCt.ownerCt is current active tab.
                            Ext.DomQuery.selectNode('iframe', button.ownerCt.ownerCt.getEl().dom).contentWindow.location.replace(href);
                            e.stopEvent();
                        }
                    }
                });

                // Add a dynamic tab (With toolbar).
                var mainTabStrip = Ext.getCmp('<%= mainTabStrip.ClientID %>');
                var tabID = 'dynamic_added_tab' + node.id.replace('__', '-');
                mainTabStrip.addTab({
                    'id': tabID,
                    'url': href,
                    'title': node.parentNode.text + ' -> ' + node.text,
                    'closable': true,
                    'bodyStyle': 'padding:0px;',
                    'iconCls': 'icon_' + href.replace(/[^.]+\./, ''),
                    'tbar': new Ext.Toolbar({
                        items: ['->',  refreshButton, '-', openNewWindowButton]
                    })
                });
            }

            // Click the tree node.
            treeMenu.on('click', function (node, event) {
                if (node.isLeaf()) {
                    var href = node.attributes.href;
                    // Modify the location of current url.
                    window.location.href = '#' + href;

                    addExampleTab(node);

                    // Don't response to this tree node's default behavior. 
                    event.stopEvent();
                }
            });


            (function pageFirstLoad() {
                var currentHash = window.location.hash.substr(1);
                var level1Nodes = treeMenu.getRootNode().childNodes;
                for (var i = 0; i < level1Nodes.length; i++) {
                    var level2Nodes = level1Nodes[i].childNodes;
                    for (var j = 0; j < level2Nodes.length; j++) {
                        var currentNode = level2Nodes[j];
                        if (currentNode.attributes.href === currentHash) {
                            level1Nodes[i].expand();
                            // We must retrieve this node again, because currentNode doesn't has parentNode property.
                            var foundNode = treeMenu.getNodeById(currentNode.id);
                            foundNode.select();
                            addExampleTab(foundNode);
                            return;
                        }
                    }
                }
            })();

        }

    </script>

</body>
</html>
